# -*- coding: utf-8 -*-
from io import StringIO

print('''
读写文件：
读写文件前，我们先必须了解一下，在磁盘上读写文件的功能都是由操作系统提供的，
现代操作系统不允许普通的程序直接操作磁盘，所以，读写文件就是请求操作系统打开一个文件对象（通常称为文件描述符），
然后，通过操作系统提供的接口从这个文件对象中读取数据（读文件），或者把数据写入这个文件对象（写文件）。
''')

print("读文本文件用 : 'r'")
with open('./python_text.txt','w') as target:
    target.write("default__init__text")

f = open("./python_text.txt",'r')
print("普通打开：" + f.read())
f.close()

try:
    f1 = open("./python_text.txt",'r')
    print("try方式打开： " + f1.read())
finally:
    if f1:
        f1.close()

#with语句来自动帮我们调用close()
with open("./python_text.txt",'r') as target:
    print("with打开 ： " + target.read())

with open("./python_text.txt", 'w') as target:
    target.write("覆盖：hello")

with open('./python_text.txt', 'r') as target:
    print("with打开 ： " + target.read())

# 内存中读写
f_m = StringIO()
f_m.write('hello_')
f_m.write('world!')
print(f_m.getvalue())


print('''
总结 ： 
* 'r' - 读取 'w' - 写入
* 打开UTF-8的文本文件用 'r' -->  open('/Users/michael/gbk.txt', 'r'）
* 打开二进制文件（视频，音频）用 'rb' -->  open('/Users/michael/gbk.txt', 'rb')
* 打开非UTF-8的文本 -->  open('/Users/michael/gbk.txt', 'r', encoding='gbk')
* 如果遇到编码错误 , 直接忽略 ： --> open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
* 内存字符串读写StringIO --> f = StringIO() f.write('hello') f.getvalue()
* 内存中byte读写 BytesIO --> f = BytesIO() f.write('中文'.encode('utf-8'))
''')



